import updateChildren from './updateChildren.js'
import createElement from './createElemnet.js'


export default function patchVnode(oldVnode,newVnode){
		// 补充elm属性
		createElement(newVnode);
		createElement(oldVnode);	
		// 判断是否是内存中的同一个对象
		if (oldVnode === newVnode) return ;
		// 判断newVnode有没有text属性
		if (newVnode.text != undefined && (newVnode.children ==undefined || newVnode.childrn.length ===0) ) {
			// newVnode中有text而没有children
			// 判断新旧text是否一样
			if (oldVnode.text != newVnode.text) {
				// 如果新的虚拟节点中text和老的虚拟节点的text不同就直接将新的虚拟节点的text写入到老的中去，
				// 这样即使老的节点中有children也会被覆盖清除
				console.log("新节点中有text且和老节点中text不同");
				oldVnode.elm.innerText = newVnode.text;
			}
		}else{
			// 如果新虚拟节点中没有text意味着有children
			// 判断老虚拟节点是否有children
			if (oldVnode.text == undefined &&(oldVnode.children.length>0 && oldVnode.children != undefined)) {
				//此时说明老的虚拟节点中也有children，需要进行精细化对比
				console.log("同一个节点开始精细化对比")
				updateChildren(oldVnode.elm,oldVnode.children,newVnode.children);

			}else{
				//老的虚拟节点没有children但是有text
				// 清空老虚拟节点中的text
				oldVnode.elm.innerText = '';
				// 遍历newVnode中的子节点，创建dom，上树
				for(var i=0;i<newVnode.children.length;i++){
					var ch = newVnode.children[i];
					console.log(ch);
					let dom = createElement(ch);
					oldVnode.elm.appendChild(dom);
				}
				console.log("新节点中有children而老节点中没有");
			}
		}	
}